export const validateMap = {
  /* 用户名校验 长度5-18位，允许大小写英文、数字、下划线 */
  validateUserName: {
    reg: /^[\u4e00-\u9fa5a-zA-Z]*$/,
    msg: '只能输入文字和字母！',
  },
  validateAdministrator: {
    reg: /^([^-!@#$%^&*(),.，。][\u4e00-\u9fa5a-zA-Z0-9-]*)$/,
    msg: '不能输入特殊字符！',
  },
  validatePositiveInteger: {
    reg: /^[1-9]\d*$/,
    msg: '必须为大于0的整数',
  },
  validatePrecision: {
    reg: /^\d+(.\d{1,2})?$/,
    msg: '不能为负数，且最多两位小数',
  },
  validatePrecisionOne: {
    reg: /^(10|([0-9])|([0]\.\d{1,2})|([1-9][0-9]*\.\d{1,2}))$/,
    msg: '不能为负数，不能大于10，且最多两位小数',
  },

  validatePrecisionOneFour: {
    reg: /^(?!-)(?!.*\..*\..*\..*)[0-9](?:\.[0-9]{1,4})?$/,
    msg: '不能为负数，不能大于10，且最多四位小数',
  },
  validatePrecisionTwo: {
    reg: /^([1-9]\d*(\.\d{1,2})?|([0](\.([0][1-9]|[1-9]\d{0,1}))))$/,
    msg: '不能小于等于0，且最多两位小数',
  },
  validatePrecisionThree: {
    reg: /^((100)|([1-9][0-9]?(\.[1-9])?)|[0]\.[1-9])$/,
    msg: '不能为负数和0，不能大于100，且最多一位小数',
  },
  validateElectricCard: {
    reg: /^[A-F0-9]{8}$/,
    msg: '请输入由数字或字母A-F组成的八位电卡号',
  },
  // /* 密码校验 8-21位大小写字母/数字/特殊符号组合 */
  // validatePassword: {
  //   reg: /^(?![A-Za-z0-9]+$)(?![a-z0-9\\W]+$)(?![A-Za-z\\W]+$)(?![A-Z0-9\\W]+$)[a-zA-Z0-9\\W]{8,21}$/,
  //   msg: '8-21位大小写字母/数字/特殊符号组合',
  // },
  validatePassword: {
    // reg: /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)(?![a-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{8,}$/,
    reg: /^(?![a-zA-Z0-9]+$)(?![A-Za-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{8,}$/,
    msg: '密码必须包含数字、字母及特殊字符，长度不能小于8！',
  },
  validateServiceMobile: {
    reg: /^\d[\d-]{6,18}\d$/,
    msg: '请输入11位手机号或固定电话（带区号）',
  },
  validateMobile: {
    reg: /^[1](([3|5|8][\d])|([4][5,6,7,8,9])|([6][5,6])|([7][3,4,5,6,7,8])|([9][8,9]))[\d]{8}$/,
    msg: '请输入正确的手机号',
  },
  validateEmail: {
    // eslint-disable-next-line no-useless-escape
    reg: /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,
    msg: '请输入正确邮箱',
  },
  validateIdCard: {
    reg: /(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/,
    msg: '请正确输入15或18位的身份证号',
  },
  validateBankNumber: {
    reg: /^[1-9]\d{9,29}$/,
    msg: '请输入正确银行卡号',
  },
  validateAmount: {
    reg: /(?:^[1-9]([0-9]+)?(?:\.[0-9]{1,2})?$)|(?:^(?:0){1}$)|(?:^[0-9]\.[0-9](?:[0-9])?$)/,
    msg: '请输入正确金额',
  },
  validateUrl: {
    reg: /^(https?|ftp|file):\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]$/,
    msg: '请输入正确的链接',
  },
  validateMiniUrl: {
    reg: /^[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]$/,
    msg: '请输入正确的小程序路径',
  },
  validateKeyWord: {
    reg: /^[A-Za-z0-9\u4e00-\u9fa5]+((,|，)[A-Za-z0-9\u4e00-\u9fa5]+){0,9}$/,
    msg: '请输入由逗号分隔的关键词，且不能超过10个',
  },
  vailddateNumber: {
    reg: /^(-?\d+)(\.\d+)?$/,
    msg: '请输入数字',
  },
  vaildateInteger: {
    reg: /^\d*$/,
    msg: '请输入整数',
  },
  validateRoleShowname: {
    reg: /^[\u4e00-\u9fa5a-zA-Z0-9]*$/,
    msg: '请中文、英文、数字任意组合',
  },
  validateExplanation: {
    reg: /.*[\u4e00-\u9fa5_a-zA-Z0-9]$/, ///.*(?<![`~!@#_$%^&*=|{}':',\\[\\\].<>/?~！@#￥……&*——|{}【】‘：”“'。，、？\s])$/, ///.*(?<![`~!@#_$%^&*()=|{}':;',\\\[\\\].<>/?~！@#￥……&*（）——|{}【】‘；：”“'。，、？\s])$/
    msg: '不允许收尾空格及<>/\'#$%^&*={}|":,及对应的中文符号',
  },
  validateMerchantShortName: {
    reg: /^(?!.*(和易充|易和充|易充))/,
    msg: '请勿输入和易充、易和充、易充等关键字',
  },
  validateDiscount: {
    reg: /^(([1-9]{1}[0-9]{1})|(100))$/,
    msg: '最多输入三位整数,不能小于10,不能大于100',
  },
  validateHour: {
    reg: /^((([1-9]|1[0-1])(\.[5]{0,1})?)|12)$/,
    msg: '请输入1-12之间的正整数或者含0.5结尾的小数',
  },
  validateLettersAndNumbers: {
    reg: /^[a-zA-Z0-9]*$/,
    msg: '只能输入数字和字母',
  },
}

/* 生成表单自定义校验函数 */
export default (key) => (rule, value, callback) => {
  if (value === '' || value === undefined || value === null) {
    rule.required || rule.defRequired
      ? callback(new Error(rule.emptymsg || '不能为空'))
      : callback()
  }
  if (key) {
    validateMap[key].reg.test(value)
      ? callback()
      : callback(new Error(validateMap[key].msg))
  } else {
    callback()
  }
}
